home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib12.dsk / LIBRARIAN CATALOGER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  167 lines

  1. 1  REM    ***********************
  2. 2  REM    * LIBRARIAN CATALOGER *
  3. 3  REM    * BY GEORGE D. PARKER *
  4. 4  REM    * COPYRIGHT (C) 1983  *
  5. 5  REM    * BY MICROSPARC, INC. *
  6. 6  REM    * LINCOLN, MA. 01773  *
  7. 7  REM    ***********************
  8. 10 NAME$ = "*":LN% = 0: HOME : VTAB 4: PRINT "          NIBBLE DISK LIBRARIAN": PRINT : PRINT "      MULTI-DISK CATALOGING SYSTEM"
  9. 20  VTAB 23: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC **": VTAB 10: PRINT "CHOOSE:"
  10. 30  PRINT : PRINT "  <1>  RUN LIBRARIAN CATALOGER"
  11. 40  PRINT "  <2>  RUN LIBRARIAN FILER"
  12. 50  PRINT "  <3>  QUIT"
  13. 60  PRINT : PRINT "   YOU WANT?  < >"; CHR$(8); CHR$(8);
  14. 70  GET A: PRINT A
  15. 80  IF A = 3  THEN  END 
  16. 90  IF A = 2  THEN  PRINT  CHR$(4);"RUN LIBRARIAN FILER"
  17. 100  PRINT  CHR$(4);"MAXFILES 1"
  18. 110  HIMEM: 39167
  19. 120  TEXT : HOME 
  20. 140  REM   ABOVE VARIABLES MUST BE DEFINED FIRST
  21. 150  ONERR  GOTO 700
  22. 160  VTAB 9: PRINT "      NIBBLE LIBRARIAN CATALOGER"
  23. 170  PRINT : PRINT : HTAB 19: PRINT "BY"
  24. 180  PRINT : HTAB 12: PRINT "GEORGE D. PARKER"
  25. 185  PRINT : PRINT "COPYRIGHT (C) 1983 BY MICRO-SPARC INC": PRINT "       ** ALL RIGHTS RESERVED **"
  26. 190  DIM PR$(500)
  27. 200 A =  PEEK(105) +256 * PEEK(106) +2
  28. 210  POKE A,32
  29. 220 CALRW = 768:LOOK = 810:LP = 941:B$ =  CHR$(7):D$ =  CHR$(4):Z$ = "< >" + CHR$(8) + CHR$(8)
  30. 230  PRINT D$;"BLOAD DLC.OBJ,D1"
  31. 240  VTAB 23: PRINT "DO YOU WANT INSTRUCTIONS? <Y> <N>: ";Z$;
  32. 250  GET A$: PRINT A$: IF A$ = "Y"  THEN  GOSUB 500
  33. 260  HOME : VTAB 5: HTAB 11:
  34. 270  PRINT "LIBRARIAN  CATALOGER"
  35. 280  PRINT : PRINT : PRINT "MENU:"
  36. 290  PRINT "   <1> GET A CATALOG"
  37. 300  PRINT "   <2> SAVE MASTER CATALOG FILE"
  38. 310  PRINT "   <3> EXIT & RUN LIBRARIAN FILER"
  39. 320  PRINT "   <4> EXIT CATALOGER"
  40. 330  PRINT : PRINT "     CHOICE? ";
  41. 340  PRINT Z$;: GET A$: PRINT A$:A =  ASC(A$) -48
  42. 350  IF A <1  OR A >4  THEN  PRINT B$;: GOTO 330
  43. 360  ON A GOTO 1000,2000,3000,3030
  44. 500  HOME : PRINT 
  45. 510  PRINT "  THIS PROGRAM IS PART ONE OF A MULTI-": PRINT "DISK CATALOGING SYSTEM.  IT READS INTO": PRINT "MEMORY THE CATALOGS OF SEVERAL DISKS "
  46. 520  PRINT "(UP TO 500 ENTRIES AT A TIME) AND CAN": PRINT "APPEND THEM TO AN APPROPRIATE TEXT FILE": PRINT "WHICH IS ACCESSED BY THE PROGRAM": PRINT "'LIBRARIAN FILER'."
  47. 530  PRINT : PRINT "  IN THIS PROGRAM YOU HAVE TWO OPTIONS.": PRINT "YOU MAY READ IN AN ENTIRE CATALOG OR": PRINT "YOU MAY REQUEST PROMPTING FOR EACH": PRINT "ENTRY AS IN THE APPLE UTILITY 'FID'."
  48. 540  PRINT : PRINT "  EACH ENTRY IS STORED AS A SINGLE ": PRINT "CHARACTER STRING OF LENGTH 38 --": PRINT "A 3 DIGIT VOLUME NUMBER, A 30 CHARACTER": PRINT "FILENAME, A 2 CHARACTER FILETYPE, AND": PRINT "A 3 DIGIT SECTOR LENGTH.  CONTROL"
  49. 550  PRINT "CHARACTERS IN FILENAMES ARE CONVERTED ": PRINT "TO REGULAR CHARACTERS IN THE MASTER": PRINT "CATALOG."
  50. 560  VTAB 24: HTAB 5: PRINT "PUSH RETURN FOR MORE ";Z$;: GET A$: PRINT 
  51. 570  HOME : PRINT : PRINT "  MOST QUESTIONS REQUIRE A SINGLE": PRINT "KEYSTROKE AND NO RETURN TO ANSWER. ": PRINT "THESE ARE INDICATED BY CHOICES IN ": PRINT "BRACKETS:  <Y> <N>  OR <1> <2> <3>."
  52. 580  PRINT "ILLEGAL ENTRIES ARE TRAPPED AND YOU ARE": PRINT "PROMPTED TO RESPOND AGAIN."
  53. 590  PRINT : PRINT "  IF YOU SHOULD EXIT THE PROGRAM OTHER": PRINT "THAN BY THE MENU, YOU MAY RE-ENTER WITH": PRINT "THE COMMAND ' GOTO 10000 '.  BECAUSE ": PRINT "OF THE CHANGE IN MAXFILES, THIS WILL": PRINT "NOT WORK AFTER A NORMAL EXIT.
  54. 600  VTAB 23: PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT 
  55. 610  RETURN 
  56. 700  PRINT : PRINT D$;"CLOSE":Y =  PEEK(222): PRINT 
  57. 710  IF Y = 4  THEN  PRINT B$;"DISK IS WRITE PROTECTED.": GOTO 770
  58. 720  IF Y = 9  THEN  PRINT B$;"DISK IS FULL.": GOTO 770
  59. 730  IF Y = 10  THEN  PRINT B$;"FILE '";F$;"' IS LOCKED.": GOTO 770
  60. 740  IF Y = 255  THEN  PRINT B$;"CTRL-C INTERRUPT": GOTO 780
  61. 750  IF Y = 8  THEN  PRINT B$;"I/O ERROR": GOTO 780
  62. 760  PRINT B$;"APPLESOFT OR DOS ERROR NUMBER ";Y;" HAS": PRINT "OCCURRED.": PRINT : PRINT "SEE PAGE 200 OF DOS MANUAL AND PAGE 136": PRINT "OF APPLESOFT REFERENCE MANUAL FOR LIST": PRINT "OF ERROR CODES."
  63. 770  PRINT : PRINT "REPLACE DISK IN DRIVE 1 IF NEEDED": PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT : GOTO 2000
  64. 780  PRINT : PRINT "PRESS RETURN TO GO TO MAIN MENU ";Z$;: GET A$
  65. 790  GOTO 260
  66. 1000  HOME : VTAB 3: PRINT "   GETTING A CATALOG": PRINT "   -----------------": PRINT 
  67. 1010  PRINT : PRINT B$;"  THIS OPTION WILL DESTROY ANY CATALOG": PRINT "CURRENTLY IN MEMORY (RAM)."
  68. 1020  PRINT : PRINT "DO YOU WANT TO:": PRINT "  <*>    ABORT": PRINT "  <RET>  CONTINUE ": PRINT : PRINT "     CHOICE? ";Z$;: GET A$: PRINT A$: IF A$ = "*"  THEN 260
  69. 1030  HOME : VTAB 5
  70. 1040  PRINT "HOW MANY DRIVES? <1> <2>: ";Z$;: GET A$: PRINT A$:DR% =  ASC(A$) -48
  71. 1050  IF DR% < >1  AND DR% < >2  THEN  PRINT : PRINT B$;: GOTO 1040
  72. 1060 I = 0
  73. 1070  PRINT : PRINT : PRINT "INSERT DISK TO BE CATALOGED IN DRIVE ";DR%
  74. 1080  PRINT "THEN PRESS RETURN. ";Z$;: GET A$: PRINT 
  75. 1090  POKE 47084,17: POKE 47085,0: POKE 47082,DR%: POKE 47081,96: POKE 47092,1
  76. 1100  CALL CALRW: REM   READ SECTOR 0
  77. 1110  GOSUB 1400
  78. 1120 VOL% =  PEEK(39174)
  79. 1130  PRINT : PRINT "THIS IS VOLUME ";VOL%
  80. 1140  PRINT "TO USE THIS NUMBER PRESS RETURN,": PRINT "ELSE ENTER AN ALTERNATIVE NUMBER."
  81. 1150  INPUT VOL$: IF VOL$ = ""  THEN VOL$ =  STR$(VOL%)
  82. 1160  PRINT : PRINT : PRINT "OPTIONS:": PRINT "    <1> ENTIRE CATALOG": PRINT "    <2> PROMPTING": PRINT 
  83. 1170  PRINT "     CHOICE? ";Z$;: GET A$: PRINT A$:A =  ASC(A$) -48
  84. 1180  IF A < >1  AND A < >2  THEN  PRINT B$;: GOTO 1170
  85. 1190  ON A GOTO 1200,1260
  86. 1200  PRINT : PRINT : VTAB 23: HTAB 15: FLASH : PRINT "CATALOGING";: NORMAL 
  87. 1210  CALL LOOK: GOSUB 1400: REM    GET FIRST ENTRY OF SECTOR
  88. 1220  IF  PEEK(255) = 0  THEN 1350
  89. 1230 PR$(I) =  RIGHT$("00" +VOL$,3) +NAME$ + RIGHT$("  " + STR$(LN%),3)
  90. 1240 I = I +1
  91. 1250  CALL LP: GOSUB 1400: GOTO 1220: REM    GET NEXT ENTRY OF SECTOR
  92. 1260  CALL LOOK: GOSUB 1400: REM    GET FIRST ENTRY OF SECTOR
  93. 1270  IF  PEEK(255) = 0  THEN 1360
  94. 1280 PR$(I) =  RIGHT$("00" +VOL$,3) +NAME$ + RIGHT$("  " + STR$(LN%),3)
  95. 1290  PRINT "-  -  -  -  -  -  -  -  -  -  -  -  -"
  96. 1300  PRINT "   " + RIGHT$(PR$(I),35): PRINT 
  97. 1310  PRINT "      ACCEPT? <Y> <N>: ";Z$;: GET A$: PRINT A$
  98. 1320  IF A$ = "Y"  THEN I = I +1: GOTO 1340
  99. 1330  IF A$ < >"N"  THEN  PRINT B$;: GOTO 1310
  100. 1340  CALL LP: GOSUB 1400: GOTO 1270: REM    GET NEXT ENTRY OF SECTOR
  101. 1350  VTAB 23: HTAB 15: PRINT "            "
  102. 1360  PRINT : PRINT : PRINT  CHR$(7);"  DONE!  FILE NOW HAS ";I;" ENTRIES.": PRINT : PRINT "CATALOG ANOTHER DISK? <Y> <N>: ";Z$;
  103. 1370  GET A$: PRINT A$: IF A$ = "Y"  THEN 1070
  104. 1380  IF DR% = 2  THEN 260
  105. 1390  PRINT : PRINT : PRINT B$;"REPLACE MASTER DISK AND PUSH RETURN ";Z$;: GET A$: PRINT : GOTO 260
  106. 1400 ERR =  PEEK(253): IF ERR = 0  THEN  RETURN 
  107. 1410  IF ERR = 8  THEN  PRINT : PRINT B$;"I/0 ERROR": GOTO 1430
  108. 1420  PRINT : PRINT  CHR$(7);"RWTS ERROR NUMBER ";ERR;" HAS OCCURRED."
  109. 1430  PRINT "CANNOT READ ANY MORE FROM THIS DISK": PRINT : PRINT "PRESS RETURN FOR MAIN MENU. ";Z$;: GET A$: GOTO 260
  110. 2000  HOME : VTAB 3
  111. 2010  PRINT "   SAVING CATALOG FILE": PRINT "   -------------------": PRINT 
  112. 2020 OP$ = D$ +"OPEN ":CL$ = D$ +"CLOSE ":RE$ = D$ +"READ ":WR$ = D$ +"WRITE "
  113. 2030  PRINT : PRINT "WHAT IS NAME OF CATALOG FILE?  (ENTER": PRINT : PRINT "* TO ABORT OR @ TO LIST THE CATALOG OF": PRINT : PRINT "YOUR MASTER DISK.)";
  114. 2040  INPUT "   ";F$
  115. 2050  IF F$ = "*"  THEN 260
  116. 2060  IF  LEN(F$) = 0  THEN  PRINT B$;: GOTO 2030
  117. 2070  IF F$ < >"@"  THEN 2100
  118. 2080  PRINT D$;"CATALOG,D1"
  119. 2090  PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT : GOTO 2010
  120. 2100  PRINT : PRINT : PRINT "NEW FILE OR APPEND TO OLD? <N> <O>: ";Z$;: GET A$: PRINT A$: PRINT : PRINT 
  121. 2110  IF A$ = "N"  THEN 2300
  122. 2120  IF A$ < >"O"  THEN  PRINT B$;: GOTO 2100
  123. 2130  PRINT OP$;F$
  124. 2140  PRINT RE$;F$
  125. 2150  ONERR  GOTO 2190: REM   SPECIAL ERROR TRAP FOR EMPTY FILE
  126. 2160  INPUT N$
  127. 2170  ONERR  GOTO 700
  128. 2180  GOTO 2250
  129. 2190  ONERR  GOTO 700
  130. 2200  IF  PEEK(222) < >5  THEN  GOTO 700
  131. 2210  PRINT CL$
  132. 2220  PRINT : PRINT B$;"FILE '";F$;"' DOES NOT EXIST.": PRINT : PRINT "DO YOU WANT TO USE IT ANYWAY? <Y><N>:": PRINT Z$;: GET A$: PRINT A$
  133. 2230  IF A$ < >"Y"  THEN 2030
  134. 2240  GOTO 2320
  135. 2250  PRINT CL$
  136. 2260 N =  VAL(N$)
  137. 2270  IF N +I < = 700  THEN 2330
  138. 2280  PRINT : PRINT : PRINT B$;"CANNOT APPEND TO FILE '";F$;"'": PRINT "BECAUSE IT WILL HAVE ";N +I;" ENTRIES."
  139. 2290  PRINT : PRINT "RESTART WITH NEW FILENAME": PRINT : PRINT "PRESS RETURN TO CONTINUE. ";Z$;: GET A$: GOTO 2000
  140. 2300  PRINT OP$;F$
  141. 2310  PRINT D$;"DELETE ";F$
  142. 2320 N = 0
  143. 2330 N = N +I:N$ =  LEFT$( STR$(N) +"    ",5)
  144. 2340  VTAB 23: HTAB 16: FLASH : PRINT "WRITING": NORMAL 
  145. 2350  PRINT OP$;F$
  146. 2360  PRINT WR$;F$
  147. 2370  PRINT N$
  148. 2380  PRINT CL$
  149. 2390  PRINT D$;"APPEND ";F$
  150. 2400  PRINT WR$;F$
  151. 2410  FOR J = 0 TO I -1
  152. 2420  PRINT PR$(J)
  153. 2430  NEXT 
  154. 2440  PRINT CL$
  155. 2460  VTAB 23: PRINT B$;"FILE '";F$;"' HAS ";N;" ENTRIES NOW.": PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT A$
  156. 2470  GOTO 260
  157. 3000  GOSUB 3070
  158. 3010  PRINT : PRINT D$;"RUN LIBRARIAN FILER"
  159. 3020  END 
  160. 3030  GOSUB 3070
  161. 3040  PRINT : PRINT D$;"MAXFILES 3"
  162. 3050  PRINT B$;"BYE-BYE";B$
  163. 3060  END 
  164. 3070  PRINT B$: PRINT "BE SURE YOU HAVE SAVED YOUR CATALOG FILE": PRINT : PRINT "DO YOU REALLY WANT TO EXIT? <Y> <N>: ";Z$;: GET A$: PRINT A$
  165. 3080  IF A$ < >"Y"  THEN 260
  166. 3090  RETURN 
  167. 10000  GOTO 260: REM   RE-ENTRY VECTOR